/*
题目描述
将若干字符串按照字母顺序（由小到大）输出。
这里的字母顺序指字符串对应字符的ascii码的大小由小到大。

输入
第一行有一个整数n，表示以下有n行，每行一个字符串。
请注意每一行的字符串可能包含空格。保证n不超过20，每一个字符串的长度不超过20。

输出
共有n行，即按照字母顺序排好序的字符串序列。
请注意行尾输出换行。
*/

#include <stdio.h>
#include <string.h>

int main() {
    int n;
    char strings[20][21];
    scanf("%d", &n);
    getchar();  // 忽略换行符：重要！！！要被坑死了，总是读取四个字符串，敲里吗（怒
    // 字符串含有空格，使用fgets读取
    for (int i = 0; i < n; i++) {
        fgets(strings[i], sizeof(strings[i]), stdin);
        // 移除换行符：也重要！！！不然输出一次就莫名其妙打个空行
        strings[i][strlen(strings[i]) - 1] = '\0';
    }
    // 冒泡排序
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            if (strcmp(strings[j], strings[j + 1]) > 0) {
                char temp[21];
                // 使用复制方法
                strcpy(temp, strings[j]);// temp 必须在前面
                strcpy(strings[j], strings[j + 1]);
                strcpy(strings[j + 1], temp);
            }
        }
    }
    for (int i = 0; i < n; i++) {
        printf("%s\n", strings[i]);
    }
    return 0;
}